<?php
namespace app\index\controller;

use think\Db;

class Index extends \think\Controller
{
    public function index()
    {
        /**
         url地址生成
         完整写法：模块/控制器/操作
         echo url('login');
         */

         $name = '张十三';
         $msg = '成功';
         $code = '200';
         $stu = ['name'=>'张三','sex'=>mt_rand(1,8),'age'=>'18'];
         $student = [];
         
         for($i=1;$i<=20;$i++){
            $student[] = ['name'=>'张三'.$i,'sex'=>mt_rand(1,2),'age'=>mt_rand(16,25),'add_time'=>time()-mt_rand(1000,10000)] ;
         }
        // $this->success('成功');
        
        $data = array('code' => $code,
                        'msg' => $msg,
                        'name' => $name,
                        'stu' => $stu,
                        'student' => $student );
        echo json_encode($data);exit;
        die;

         $this->assign('stu',$stu);
         $this->assign('name',$name);
         $this->assign('student',$student);
         // echo json_encode($stu);
         // echo json_encode($student);


         //调用模板
         return $this->fetch();
    }
    public function login()
    {
        return $this->fetch('login');
    }
	public function muban()
	{
		//拆查询数据 - 去掉表前缀  3
    	$list = Db::name('data')
    	->where('id','>=',50)
    	->select();
    	// dump($list);
    	// exit();

		//模板变量赋值
		$this->assign('name','<h1>^_^</h1>Rinuo');
		$this->assign('email','2350768356@qq.com');
		//或者批量赋值
		// $this->assign([
		// 	'name' => 'rinuo',
		// 	'email' => '2350768356@qq.com'
	
		//数组赋值
		$data['name'] = 'data_name';
		$data['email'] = 'date_2350768356@qq.com';

		$this->assign('data',$data);
		$this->assign('list',$list);

		//模板输出 - 指定模板文件名
		// return $this->fetch('muban');
		//模板输出 - 使用默认控制器的名字
		//return $this->fetch();
		return $this->fetch('muban');
	}

    public function xiaolian()
    {
        echo '<style type="text/css">*{ padding: 0; margin: 0; } .think_default_text{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p> ThinkPHP V5<br/><span style="font-size:30px">十年磨一剑 - 为API开发设计的高性能框架</span></p>';
        //插入记录 原生写法
        $result = Db::execute('insert into think_data (name,status) values ("thinkphp1^_^",1)');  
    	dump($result);

    	//插入记录 - 用TP5的查询构造器方法
    	Db::table('think_data')->insert(['name'=>'thinkphp2^_^','status'=>1]);

    	//插入记录 - 去掉表前缀
    	Db::name('data')->insert(['name'=>'thinkphp3^_^']);


    	//插入记录 - 更加简单的写法
    	$db = db('data');
    	//插入记录
    	$result1 = $db->insertGetId(['name'=>'thinkphp4']);
    	dump($result1);//添加数据后如果需要返回新增数据的自增主键，可以使用getLastInsID方法或者直接使用insertGetId方法新增数据并返回主键值：

    	//插入记录 - 返回ID的方法
    	$data = ['name' => 'thinkphp5'];
    	$result2 = Db::name('data')->insertGetId($data);
    	dump($result2);

    	//插入记录 - 插入多条的方法
    	$data = [
    		['name' => 'thinkphp6-1'],
    		['name' => 'thinkphp6-2'],
    		['title' => '标题'],
    		['name' => 'thinkphp6-3']
    	];

    	$result3 = $db->insertAll($data);
    	dump($result3);//insertAll 方法添加数据成功返回添加成功的条数

    }

    public function select()
    {
    	echo "查询数据";
    	//查询数据 - 原生写法 1
    	$result = Db::query('select * from think_data where id = 5');
    	dump($result);//Db::query()遍历输出结果集：

    	//查询数据 - 用TP5的查询构造器方法  2
    	$list = Db::table('think_data')
    	->where('id',18)
    	->select();
    	dump($list);

    	//拆查询数据 - 去掉表前缀  3
    	$list = Db::name('data')
    	->where('id',20)
    	->select();
    	dump($list);

    	//查询数据 - 更加简化的写法 通过助手db函数 4
    	$db = db('data');
    	$list = $db->where('id',22)->select();
    	dump($list);

    }

    public function insert(){
    	echo "插入数据";
   
    	//插入记录 - 用原生写法 - 优点：直接用sql语句
    	$result = Db::execute('insert into think_data (name,status) values ("thinkphp1^_^",1)');  //Db::execute执行预处理语句
    	dump($result);

    	//插入记录 - 用TP5的查询构造器方法
    	Db::table('think_data')->insert(['name'=>'thinkphp2^_^','status'=>1]);

    	//插入记录 - 去掉表前缀
    	Db::name('data')->insert(['name'=>'thinkphp3^_^']);

    	//插入记录 - 更加简单的写法
    	$db = db('data');
    	//插入记录
    	$result1 = $db->insertGetId(['name'=>'thinkphp4^_^']);
    	dump($result);//添加数据后如果需要返回新增数据的自增主键，可以使用getLastInsID方法或者直接使用insertGetId方法新增数据并返回主键值：


    	//插入记录 - 返回ID的方法
    	$data = ['name' => 'thinkphp5'];
    	$result2 = Db::name('data')->insertGetId($data);
    	dump($result2);

    	//插入记录 - 插入多条的方法
    	$data = [
    		['name' => 'thinkphp6-1'],
    		['name' => 'thinkphp6-2'],
    		['name' => 'thinkphp6-3']
    	];

    	$result3 = $db->insertAll($data);
    	dump($result3);//insertAll 方法添加数据成功返回添加成功的条数
    }

    public function delete()
    {
    	echo "删除数据";

    	//删除数据 - 原生写法 1
    	$result = Db::execute("delete from think_data where id = 5");
    	dump($result);

    	//删除数据 - 用TP5的查询构造器方法 2
    	Db::table('think_data')
    	->where('id',18)
    	->delete();

    	//删除数据 - 去掉表前缀 3
    	Db::name('data')
    	->where('id',18)
    	->delete();

    	//删除数据 - 更加简化的写法 通过助手db函数 4
    	$db = db('data');
    	$db->where('id','<',2)->delete();

    	//删除数据 - 根据主键删除 精简写法 5
    	db('data')->delete(1);
    	db('data')->delete([1,8,3]);
    }

    public function update(){
    	echo "<h1>更新数据<h1>";
    	//更新记录 - 原生写法 1
    	$result = Db::execute('update think_data set name = "5^_^" where id <= 5');
    	dump($result);

    	//更新记录 - 用TP5的查询构造器方法 2
    	Db::table('think_data')
    	->where('id',18)
    	->update(['name'=>"18^_^"]);

    	//更新记录 - 去掉表前缀 3
    	Db::name('data')
    	->where('id',16)
    	->update(['name'=>"16^_^"]);

    	//更新记录 - 更加简化的写法 通过助手db函数 4
    	$db = db('data');
    	$db->where('id',20)->update(['name'=>"20^_^",'title'=>"我改变文章标题!"]);
    }

    public function hello($name = 'word')
    {
    	echo 'hello,'.$name.'!你的文章发布成功';

    	//插入记录 - 去掉表前缀
    	// Db::name('data')->insert(['name'=>$name]);

    	//删除数据 - 去掉表前缀 3
    	Db::name('data')
    	->where('name',$name)
    	->delete();
    }

    public function hello3($name = 'Word',$ctiy = '')
    {
    	return 'hello,'.$name.'! You come from'.$ctiy.'.';
    }
    // 事务机制 数据表存储类型为InnoDB才有事务
    public function shiwu()
    {
        //自动事务
        // Db::transaction(function(){

        //     Db::name("user")->delete(2);


        //     Db::name("user")->deletes();
        // });
        
        
        //手动控制事务
            
            //开启事务
            // Db::startTrans();

            // //事务
            
            // try{
            //     //删除数据id的
                
            //     $a = Db::name('user')->delete(9); 
            //     if(!$a) {
            //         throw new \Exception("a删除数据没有成功");
            //     }   

            //     //判断是否删除
            //     //删除不在的数据
            //     $b = Db::name('user')->delete(60);
            //     if(!$b){
            //         throw new \Exception("b删除数据没有成功");
            //     }


            //     // Db::name('user')->delete(9);

            //     // //删除不存在的数据  id 60
                
            //     // Db::name("user")->delete(20);

            //     //执行提交操作
                
            //     Db::commit();
                

            // }catch(\Exception $e){
            //     //回滚事务
            //     Db::rollback();

            //     dump($e->getMessage());
            // }

        //开启事务
        Db::startTrans();

        //删除数据  33
        $a = Db::name("user")->delete(16);

        $b = Db::name("user")->delete(44);

        //判断条件
        
        if($a && $b){
            //提交事务
            Db::commit();
        }else{
            //回滚事务
            Db::rollback();
        }

    }
    //视图查询 两表查询
    public function views()
    {
        //SELECT `goods`.`id`,`goods`.`name`,`goods`.`price`,type.name tname FROM `think_goods` `goods` INNER JOIN `think_type` `type` ON `type`.`id`=`goods`.`cid`
        $data = Db::view("goods","id,name,price")
                    ->view("type","name tname","type.id=goods.cid")
                    ->select();

        //左连接 SELECT `goods`.`id`,`goods`.`name`,`goods`.`price`,type.name tname FROM `think_goods` `goods` LEFT JOIN `think_type` `type` ON `type`.`id`=`goods`.`cid`           
        $data = Db::view("goods","id,name,price")
                    ->view("type","name tname","type.id=goods.cid","left")
                    ->select();
        // echo Db::getLastSql();//打印sql语句

        //右连接 SELECT `goods`.`id`,`goods`.`name`,`goods`.`price`,type.name tname FROM `think_goods` `goods` RIGHT JOIN `think_type` `type` ON `type`.`id`=`goods`.`cid`           
        $data = Db::view("goods","id,name,price")
                    ->view("type","name tname","type.id=goods.cid","right")
                    ->select();
        // echo Db::getLastSql();//打印sql语句

        echo json_encode($data);
    }
}
